﻿// using System.Collections.Concurrent;
// using System.Text;
//
// namespace OpenAIProxy;
//
// public interface IAuditLogger
// {
//     Task BeginRequestLog(string requestId, string context);
//     Task AppendContent(string requestId, string contentChunk);
//     Task FinalizeRequest(string requestId, string sseContent, string rawContent, int tokenCount);
// }
//
// public class PersistentAuditLogger : IAuditLogger
// {
//     private readonly IStorageService _storageService;
//     private readonly ILogger<PersistentAuditLogger> _logger;
//     private readonly ConcurrentDictionary<string, StringBuilder> _requestContents = new();
//
//     public PersistentAuditLogger(
//         IStorageService storageService, 
//         ILogger<PersistentAuditLogger> logger)
//     {
//         _storageService = storageService;
//         _logger = logger;
//     }
//
//     public Task BeginRequestLog(string requestId, string context)
//     {
//         _requestContents[requestId] = new StringBuilder();
//         return Task.CompletedTask;
//     }
//
//     public Task AppendContent(string requestId, string contentChunk)
//     {
//         if (_requestContents.TryGetValue(requestId, out var builder) && !string.IsNullOrEmpty(contentChunk))
//         {
//             builder.Append(contentChunk);
//         }
//         return Task.CompletedTask;
//     }
//
//     public async Task FinalizeRequest(string requestId, string sseContent, string rawContent, int totalTokens)
//     {
//         try
//         {
//             if (_requestContents.TryRemove(requestId, out var contentBuilder))
//             {
//                 var combinedContent = contentBuilder.ToString();
//                 
//                 // 保存到存储
//                 var record = new AuditLogRecord(
//                     Id: requestId,
//                     Timestamp: DateTime.UtcNow,
//                     Content: combinedContent,
//                     RawContent: rawContent,
//                     TokenCount: totalTokens,
//                     IsComplete: true
//                 );
//                 
//                 await _storageService.SaveAuditLogAsync(record);
//                 
//                 _logger.LogInformation($"Audit log saved for {requestId} with {combinedContent.Length} chars");
//             }
//         }
//         catch (Exception ex)
//         {
//             _logger.LogError(ex, $"Error finalizing audit log for {requestId}");
//         }
//     }
// }
//
// public record AuditLogRecord(
//     string Id,
//     DateTime Timestamp,
//     string Content,
//     string RawContent,
//     int TokenCount,
//     bool IsComplete
// );
